package com.application.spider.model;

import java.util.LinkedList;
import java.util.List;

import com.application.spider.entities.RedSocial;
import com.application.spider.entities.alias.AttributeDataType;
import com.application.spider.entities.alias.DataType;
import com.application.spider.entities.regex.RedSocialRegex;
import com.application.spider.exception.ItemNotFoundException;
import com.application.spider.exception.PageNotFoundException;
import com.application.spider.model.alias.ManagerSinonimos;

public class RetrieveRedSocial extends RetrivierWeb{

	public RetrieveRedSocial(ManagerSinonimos managerSinonimos) {
		super(managerSinonimos);
		setDataType(DataType.redSocial);
	}
	public List<RedSocial> retrieve(RedSocialRegex regex,String charset) throws PageNotFoundException, ItemNotFoundException {
		List<String> 	datos = null;
		String 			dato = null;
		List<RedSocial>	redSociales = null;
		RedSocial		redSocial = null;
		String			url = "";
		String			page = "";
		String			regexPage = "";
		Integer			grupoIdPage = 0;
		String			regexSedeData = "";
		
		if(regex!=null){
			url = regex.getUrl();
			page = regex.getPage();
			regexPage = regex.getRegexPage();
			grupoIdPage = regex.getGrupoIdPage();
			regexSedeData = regex.getRegexData();
			dato = getWebPageContent(url, page, regexPage,grupoIdPage,charset);
			if(!dato.isEmpty()){
				//obtengo cada uno de los elementos
				datos = getValues("red social item",dato,regexSedeData,1);
				if(datos!=null && !datos.isEmpty()){
					redSociales = new LinkedList<RedSocial>();
					for (String item : datos) {
						redSocial = buildRedSocial(regex,item,charset);
						if(redSocial!=null){
							redSociales.add(redSocial);
						}
					}
				}else{
					throw new ItemNotFoundException("no se pudo encontrar el valor del item de la pagina web "+url+" con los limites '"+regexPage+"' y charset "+charset+" regex sede data "+regexSedeData);
				}
			}else{
				throw new PageNotFoundException("no se pudo encontrar la pagina web "+url+" con los limites '"+regexPage+"' y charset "+charset);
			}
		}
		return redSociales;
	}
	private RedSocial buildRedSocial(RedSocialRegex sedeRegex, String dato, String charset) throws ItemNotFoundException {
		RedSocial value = new RedSocial();
		value.setNombre(getValueWhitoutException(AttributeDataType.nombre, dato, sedeRegex.getRegexNombre(), charset));
		value.setLink(getValueWhitoutException(AttributeDataType.link, dato, sedeRegex.getRegexLink(), charset));
		value.setDescripcion(getValueWhitoutException(AttributeDataType.descripcion, dato, sedeRegex.getRegexDescripcion(), charset));
		return value;
	}
	
}
